/**
 * Copyright 2019 asiainfo Inc.
 **/
package com.myz.rabbitmqspring.spring.consume;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.stereotype.Component;

/**
 * 推荐使用ChannelAwareMessageListener<I>
 *
 * @author maoyz0621 on 19-1-17
 * @version: v1.0
 */
@Component
public class MessageListenerConsumer implements MessageListener {

    private static final Logger log = LoggerFactory.getLogger(MessageListenerConsumer.class);

    /**
     * 处理收到的rabbit消息的回调方法。
     * 只需要获取message的body即可，通过json来转换我们需要的程序
     * （比如我们可以发送一个map，map存放方法和实体，这样我们可以通过反射来调用不同的程序来运行）
     * 由于没有应答机制，会阻塞
     *
     * @param message AMQP封装消息对象
     */
    @Override
    public void onMessage(Message message) {
        log.debug("MessageListenerConsumer onMessage() start");

        try {
            String body = new String(message.getBody(), "UTF-8");
            log.debug("IMessageConsumer receive message : {} ; deliveryTag = {}", body, message.getMessageProperties().getDeliveryTag());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
